package logger

import (
	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

// Logger 全局 Logger 对象
var Logger *zap.SugaredLogger

func InitLogger(env string) {
	var logger *zap.Logger
	if env == "dev" {
		logger, _ = zap.NewDevelopment()
	} else {
		// 获取编码器,NewJSONEncoder()输出json格式，NewConsoleEncoder()输出普通文本格式
		encoderConfig := zap.NewProductionEncoderConfig()
		encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder //指定时间格式
		encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
		encoder := zapcore.NewConsoleEncoder(encoderConfig) // 控制台格式
		// encoder := zapcore.NewJSONEncoder(encoderConfig) // json 格式

		// 文件 writeSyncer
		fileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
			Filename:   "./log/app.log", //日志文件存放目录
			MaxSize:    1024,            //文件大小限制,单位MB
			MaxBackups: 5,               //最大保留日志文件数量
			MaxAge:     30,              //日志文件保留天数
			Compress:   false,           //是否压缩处理
		})

		// zapcore.NewMultiWriteSyncer(fileWriteSyncer, zapcore.AddSync(os.Stdout)) // log文件、控制台双写
		// zapcore.NewMultiWriteSyncer(fileWriteSyncer) // 只写 log 文件
		fileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(fileWriteSyncer), zapcore.DebugLevel) //第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志

		logger = zap.New(fileCore, zap.AddCaller()) //AddCaller()为显示文件名和行号
	}
	zap.ReplaceGlobals(logger)
	Logger = zap.S()
}
